﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using Aga.GestionDeArchivos.Domain.Entities;
using System.Data.Objects;

namespace Aga.GestionDeArchivos.Storage
{
    public class UbicacionRepository : RepositoryBase<Ubicacion>
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UbicacionRepository"/> class.
        /// </summary>
        /// <param name="context">The context.</param>
        public UbicacionRepository(AgaEntities context)
            : base(context) { }

        /// <summary>
        /// Adds to context.
        /// </summary>
        /// <param name="entity">The entity.</param>
        /// <returns></returns>
        protected override Action<Ubicacion> AddToContext(Ubicacion entity)
        {
            return delegate { Context.AddToUbicaciones(entity); };
        }

        /// <summary>
        /// Gets the entity set.
        /// </summary>
        /// <value>The entity set.</value>
        protected override ObjectSet<Ubicacion> EntitySet
        {
            get { return Context.Ubicaciones; }
        }

        /// <summary>
        /// Gets the ubicacion by numero.
        /// </summary>
        /// <param name="numero">The numero.</param>
        /// <returns></returns>
        public Ubicacion GetByNumero(int numero)
        {
            return EntitySet.FirstOrDefault(u => u.NumeroCaja.Equals(numero));
        }

        /// <summary>
        /// Gets the by codigo.
        /// </summary>
        /// <param name="codigoUbicacion">The codigo ubicacion.</param>
        /// <returns></returns>
        public Ubicacion GetByCodigo(string codigo)
        {
            codigo = NormalizarCodigoBarra(codigo);

            var ubicacion = EntitySet.FirstOrDefault(u => u.CodigoBarra.Equals(codigo));

            if (ubicacion == null)
            {
                int codInt;

                if (Int32.TryParse(codigo, out codInt))
                    ubicacion = EntitySet.FirstOrDefault(u => u.Id.Equals(codigo));
            }

            return ubicacion;
        }

        private static string NormalizarCodigoBarra(string codigoBarra)
        {
            if (!codigoBarra.ToCharArray().Contains('-'))
            {
                if (!codigoBarra.StartsWith("*"))
                    codigoBarra = "*" + codigoBarra;
                if (!codigoBarra.EndsWith("*"))
                    codigoBarra += "*";
            }
            return codigoBarra;
        }

    }
}
